package com.yuanda.wordhot.service;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.yuanda.wordhot.entity.ConfigEntity;
import com.yuanda.wordhot.repository.ConfigRepository;

@Service
public class ConfigService {
	@Autowired
	private ConfigRepository configRepository;

	public List<ConfigEntity> getConfigsByType(String type) {
		return configRepository.queryConfigsByType(type);
	}

	public List<ConfigEntity> getConfigsByParent(String parentId) {
		return configRepository.queryConfigsByParent(parentId);
	}

	@Transactional
	public void updateConfig(ConfigEntity config) {
		configRepository.update(config);
		modifyLeafRel(config);
	}

	@Transactional
	public void deleteConfig(String configId) {
		ConfigEntity config = configRepository.get(configId);
		configRepository.remove(config);
		modifyLeafRel(config);
	}

	@Transactional
	public void addConfig(ConfigEntity config) {
		// 添加节点的时候注意维护是否叶子节点关系
		configRepository.add(config);
		modifyLeafRel(config);
	}

	/**
	 * 修改父级节点是否为叶子节点
	 */
	private void modifyLeafRel(ConfigEntity config) {
		String parentId = config.getParentId();
		if (StringUtils.isNotBlank(parentId)) {
			//
			ConfigEntity parent = configRepository.get(parentId);
			long size = configRepository.queryChildSize(parentId);
			// 如果是叶子节点 但是子节点数量大于0则 修改为不是叶子节点
			if (parent.isLeaf() && size > 0) {
				parent.setLeaf(false);
				configRepository.update(parent);
			} else if (!parent.isLeaf() && size == 0) {
				// 如果不是叶子节点 但是子节点数量为0 修改为叶子节点
				parent.setLeaf(true);
				configRepository.update(parent);
			}

		}
	}
}
